home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
misc
/
speak_ez.lzh
/
heythere.c
next >
Wrap
C/C++ Source or Header
|
1990-09-27
|
2KB
|
76 lines
/*
heythere.c
written by:
Randy Hosler 26 SEP 1990
randyh@hpsadpk
adapted from code written by:
Steve Bate, November 1986
ARPA: smb.mdc@office-1.arpa
AURA BBS: (314) 928-0598 (ST BBS, 20 Meg of downloads)
*/
#include <stdio.h>
#include <osbind.h>
main (argc,argv)
int argc;
char *argv[];
{
long base;
base = Pexec(3, "stspeech.tos", NULL, NULL);
if (base < 0) exit(1);
speak("hay there, world", base);
}
/* speak function - takes pointer to char for text to speak
and long for base address of stspeech.tos */
long _STKSIZ = 4096L;
char rts[2] = {0x4e,0x75};
speak(speechin, base)
char *speechin;
long base;
{
register char *program,*buffer;
program = (char *)(base + 0x100);
strncpy(program + 0x0e,rts,2);
strncpy(program + 0x6c,rts,2);
buffer = program + 0x6eee;
strcpy(buffer+2, speechin);
*buffer = 0xfe;
*(buffer+1) = (char)strlen(buffer+2)-1;
/*
STSPEECH will respeak the last line if the current
input line is a '\n'. The '\n' is replaced by a
space to defeat this redundant speech on double spaced
files.
*/
if (!*(buffer+1)) strncpy(buffer+1,"\1 \0",3);
asm("movem.l a4-a6,-(sp)");
asm("move.l a3,-(sp)");
asm("jsr 50(a3)");
asm("move.l (sp),a3");
asm("jsr 136(a3)");
asm("move.l (sp)+,a3");
asm("movem.l (sp)+,a4-a6");
buffer = program + 0x6eee;
}